package pers.xiaojun.boot.module.system.service.oauth2;

import pers.xiaojun.boot.module.system.dao.entity.user.AdminUserDO;
import pers.xiaojun.boot.module.system.service.oauth2.dto.OAuth2TokenDTO;

import java.util.List;

/**
 * OAuth2 访问令牌服务：提供令牌创建、校验等服务
 * <p>
 * 从功能上，和 Spring Security OAuth 的 DefaultTokenServices + JdbcTokenStore 的功能，提供访问令牌、刷新令牌的操作
 *
 * @author xiaojun
 * @since 2025-10-08
 */
public interface OAuth2TokenService {


    /**
     * 创建访问令牌
     *
     * @param userId   用户id
     * @param clientId 客户端id
     * @param secret   客户端密钥
     * @param scopes   授权空间
     * @return 令牌信息
     */
    OAuth2TokenDTO createAccessToken(Long userId, String clientId, String secret, List<String> scopes);

    /**
     * 通过 refreshToken 刷新访问令牌
     *
     * @param refreshToken 刷新Token
     * @param clientId     客户端Id
     * @return 令牌信息
     */
    OAuth2TokenDTO refreshAccessToken(String refreshToken, String clientId);

    /**
     * 检查Token，并返回Token信息
     *
     * @param token Token
     * @return {@link OAuth2TokenDTO}
     */
    OAuth2TokenDTO checkAccessToken(String token);

    /**
     * 删除 Token
     *
     * @param token Token
     */
    void removeAccessToken(String token);
}
